<!-- 
    //函数的调用方式     this指向
    1.普通函数           window
    
    2.对象得到方法       实例对象，原型方法里面的方法也指向实例对象
    3.构造函数          该方法所属对象
    4.绑定事件函数      绑定事件对象
    5.定时器函数           window
    6.立即执行函数         window
 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>点击</button>
    <script>
        //1.普通函数this指向window
        function fn() {
            console.log('普通函数里面的this指的是' + this);  //this指向window

        }
        window.fn();
        fn();
        // fn.call(); //调用普通函数

        //2.对象的方法,在对象里面定义一个函数,this指向的是o
        var o = {
            sayHi: function () {
                console.log('对象的方法的this指的是' + this);

            }
        }
        o.sayHi();  //谁调用这个方法，这个方法里面的this就指向谁


        // //3.构造函数，this指向的是ldh,原型对象里面的this指向的是ldh这个实例对象
        function Star() { }
        Star.prototype.sing = function () {
            console.log('构造函数里面的this指的是' + this);

        }
        var ldh = new Star();
        ldh.sing();

        //4.绑定事件的函数(点击按钮就可以调用),yhis指向的是btn这个按钮对象
        var btn = document.querySelector('button');
        btn.onclick = function () {
            console.log('绑定事件函数的this：' + this);
        }

        //5.定时器函数this指向的是windiw即定时器的调用者
        window.setInterval(function () {
            console.log('定时器的this指的是' + this);
        }, 1000); //这个函数是定时器自动1秒钟调用1次


        // //6.立即执行函数this指向的是windiw
        (function () {
            console.log('立即执行函数里面的this指的是' + this);
        })();
         //立即执行函数是自动调用的

    </script>
</body>

</html>